﻿using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Data;
using System.Text;
using YookingBizWQW.Class.Public;
using YookingCrypto.Class;
using YookingDBNormal.Class;
using YookingFileIO.Class;
using YookingKitBox.Class.Public;
using YookingSvrDBCall.Class.DBLogic;
using YookingSvrDBCall.Class.DBPub;

namespace YookingBizWQW.Class.Admin
{
    class clsDBDefine
    {
        //注释：王庆文 2020年01月18日===============================================================================
        //将创建物理数据库的SQL脚本提交到后台，在相应的strDBGroup连接串所在服务器上创建实体数据库表
        public string CreateEntityDBTable(string strB64RequestData)
        {
            string strRtData = ""; //记录全部SQL语句的执行情况

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strDBGroup = "Data"; //数据库连接串分组名
            string strSQLScript = "1=1"; //待执行的全部SQL脚本

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 2)
            {
                strDBGroup = strArray[0];
                strSQLScript = strArray[1];
            }

            #endregion

            //执行SQL脚本之前，先去掉回车和换行符
            strSQLScript = strSQLScript.Replace("\r", "");
            strSQLScript = strSQLScript.Replace("\n", "");

            //将每一条有效的SQL语句都执行一遍
            string[] strSQLArray = strSQLScript.Split(";");

            int iSucsCount = 0; //执行成功的SQL数量
            int iScriptCount = strSQLArray.Length - 1; //SQL总数

            clsDbSQLLogic myDB = new clsDbSQLLogic(); //实例化数据库类
            foreach (string strSQLRow in strSQLArray) //遍历SQL数组
            {
                if (strSQLRow.Replace(" ", "") != "") //非SQL语句，不需要执行
                {
                    object objSucsCount = myDB.YookingExecuteNonQuery(strDBGroup, strSQLRow);

                    string strTmpSQL = "no data"; //单行脚本的临时解析
                    int iCurrentOKCount = Convert.ToInt32(objSucsCount); //本次受影响的行数
                    if (strSQLRow.Contains("CREATE TABLE")) //建表语句去掉其他非必须的文字
                    {
                        //建表脚本因为太长了，所以只取左括号前的部分，表达出意思即可
                        strTmpSQL = strSQLRow.Substring(0, strSQLRow.IndexOf("(")); 
                    }
                    else
                    {
                        strTmpSQL = strSQLRow; //建索引语句不太长，因此直接取整个SQL语句                      
                    }

                    iSucsCount += iCurrentOKCount; //受影响的总行数
                    strRtData += strTmpSQL + "★语句执行完毕，受影响的行数为【" + iCurrentOKCount + "】★";
                }
            }

            strRtData += "★SQL语句全部执行完毕，成功执行的脚本总数为【" + iSucsCount + "/" + iScriptCount + "】行！★";

            //由于大文本中包含中文，因此返回给
            //客户端的时候会出错，因此需要密文反馈
            string strEnRtData = clsBase64.Base64Encode(strRtData);

            return strEnRtData; //反馈给客户端的密文执行结果
        }

        //注释：王庆文 2020年01月20日====================================================================================
        //数据中物理实体表创建完毕，再把库表字段结构信息保存到YookingSys表空间的定义库DB_TABLEDEFINE和DB_FIELDDEFINE中
        public string WriteTableDefineToDB(string strB64RequestData)
        {
            string strRtData = "no data"; //记录表定义及字段定义信息的写库情况

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strTblJsonArray = "[]"; //要保存到DB_TABLEDEFINE中的数据
            string strFldJsonArray = "[]"; //要保存到DB_FIELDDEFINE中的数据
            string strTblKeyColSet = "a,b"; //防止表定义重复的KEY集合
            string strFldKeyColSet = "a,b"; //防止字段定义重复的KEY集合
            string strCliUserName = "02120119901"; //客户端操作用户名

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 5)
            {
                strTblJsonArray = strArray[0];
                strFldJsonArray = strArray[1];
                strTblKeyColSet = strArray[2];
                strFldKeyColSet = strArray[3];
                strCliUserName = strArray[4];
            }

            #endregion

            clsWriteDB myDB = new clsWriteDB(); //实例化数据库读写类库

            //向DB_TABLEDEFINE表中写入库表定义信息，并记录执行情况
            DataSet dsTable = clsJConvert.JArryToDataSet(strTblJsonArray); //将表定义Json数组转成DataSet    
            string strTblResult = myDB.WriteDBNormal_UseSYSCol("Sys", "DB_TABLEDEFINE", strTblKeyColSet, strCliUserName, dsTable);
            Object objTbl = JsonConvert.DeserializeObject(strTblResult); //json数组文本转成对象
            JArray jobjTbl = objTbl as JArray; //把上面的objTbl转换为Jobject对象
            string strTblIstCount = jobjTbl[0]["InsertCount"].ToString(); //DB_TABLEDEFINE写入成功的记录数量
            string strTblUpdCount = jobjTbl[0]["UpdateCount"].ToString(); //DB_TABLEDEFINE更新成功的记录数量

            //向DB_FIELDDEFINE表中写入字段定义信息，并记录执行情况
            DataSet dsField = clsJConvert.JArryToDataSet(strFldJsonArray); //将字段定义Json数组转成DataSet
            string strFldResult = myDB.WriteDBNormal_UseSYSCol("Sys", "DB_FIELDDEFINE", strFldKeyColSet, strCliUserName, dsField);
            Object objFld = JsonConvert.DeserializeObject(strFldResult); //json数组文本转成对象
            JArray jobjFld = objFld as JArray; //把上面的objFld转换为Jobject对象
            string strFldIstCount = jobjFld[0]["InsertCount"].ToString(); //DB_FIELDDEFINE写入成功的记录数量
            string strFldUpdCount = jobjFld[0]["UpdateCount"].ToString(); //DB_FIELDDEFINE更新成功的记录数量

            strRtData = "DB_TABLEDEFINE写入成功的记录数量为【"+ strTblIstCount + "】★";
            strRtData += "DB_TABLEDEFINE更新成功的记录数量为【" + strTblUpdCount + "】★";
            strRtData += "★";
            strRtData += "DB_FIELDDEFINE写入成功的记录数量为【" + strFldIstCount + "】★";
            strRtData += "DB_FIELDDEFINE更新成功的记录数量为【" + strFldUpdCount + "】★";

            return strRtData; //反馈给客户端的写库执行结果
        }

        //注释：王庆文 2020年01月22日=============================================================
        //获取数据库表本身的说明及定义信息
        public string Get_DBTableDefine(string strB64RequestData)
        {
            string strRtData = "no data";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strTimeBegin = "00:00";  //库表创建时间起
            string strTimeEnd = "00:00:00"; //库表创建时间至
            string strTableName = "wqw";  //库表名称
            string strTableMemo = "测试"; //库表说明
            string strDBName = "Data";    //连接串分组名
            string strKeyWord = ""; //全文检索关键词

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 6)
            {
                strTimeBegin = strArray[0];
                strTimeEnd = strArray[1];
                strTableName = strArray[2];
                strTableMemo = strArray[3];
                strDBName = strArray[4];
                strKeyWord = strArray[5];
            }

            #endregion

            string strCondition = "1=1"; //动态生成SQL查询条件

            if (strTimeBegin != "") //库表创建时间起
            {
                DateTime dtBG = DateTime.Parse(strTimeBegin);
                string strBG = dtBG.ToString("yyyy-MM-dd HH:mm:ss");
                strCondition += " and Sys_InputDateTime>='" + strBG + "' "; ;
            }

            if (strTimeEnd != "") //库表创建时间至
            {
                DateTime dtED = DateTime.Parse(strTimeEnd);
                string strED = dtED.ToString("yyyy-MM-dd HH:mm:ss");
                strCondition += " and Sys_InputDateTime<='" + strED + "' "; ;
            }

            if (strTableName != "") //库表字母名称条件
            {
                strCondition += " and upper(t.TableName)='" + strTableName .ToUpper() + "' "; ;
            }

            if (strTableMemo != "") //库表中文解释条件
            {
                strCondition += " and t.TableMemo like '%" + strTableMemo + "%' ";
            }

            if (strDBName != "") //库表连接串分组名条件
            {
                strCondition += " and upper(t.DBName)='" + strDBName.ToUpper() + "' ";
            }

            if (strKeyWord != "") //用于全文检索的关键词查询条件
            {
                strCondition = "(t.TableID like '%" + strKeyWord + "%'";
                strCondition += " or t.TableName like '%" + strKeyWord + "%'";
                strCondition += " or t.TableMemo like '%" + strKeyWord + "%'";
                strCondition += " or t.DBName like '%" + strKeyWord + "%')";
            }

            #region 生成查询记录的SQL语句

            StringBuilder sbQuerySQL = new StringBuilder();
            sbQuerySQL.AppendLine(" select TABLEID, ");
            sbQuerySQL.AppendLine("        TABLENAME, ");
            sbQuerySQL.AppendLine("        TABLEMEMO, ");
            sbQuerySQL.AppendLine("        DBNAME, ");
            sbQuerySQL.AppendLine("        ISPARTITION, ");
            sbQuerySQL.AppendLine("        OUTNETISPACK, ");
            sbQuerySQL.AppendLine("        OUTNETISCLEAR, ");
            sbQuerySQL.AppendLine("        INNETISPACK, ");
            sbQuerySQL.AppendLine("        INNETISCLEAR, ");
            sbQuerySQL.AppendLine("        (select count(1) from DB_FIELDDEFINE a ");
            sbQuerySQL.AppendLine("          where " + clsSQLSyntax.IsNullSQL("Sys", "a.SYS_CANCELDATETIME"));
            sbQuerySQL.AppendLine("            and a.TableID = t.tableid ");
            sbQuerySQL.AppendLine("            and a.fieldorder < '90000000') as FIELDCOUNT ");
            sbQuerySQL.AppendLine("   from DB_TABLEDEFINE t ");
            sbQuerySQL.AppendLine("  where " + clsSQLSyntax.IsNullSQL("Sys", "t.SYS_CANCELDATETIME"));
            sbQuerySQL.AppendLine("   and " + strCondition);
            sbQuerySQL.AppendLine("   and " + clsSQLSyntax.RowRange("Sys",0,20));

            #endregion

            //clsRWFile myLog = new clsRWFile(); //将待执行的SQL语句记录下来
            //myLog.WriteInfoToTxtFile("SysLog", "wqw.txt", sbQuerySQL.ToString());

            clsDbSQLLogic myDB = new clsDbSQLLogic(); //实例化数据库操作类
            strRtData = myDB.YookingExecuteJson("Sys", sbQuerySQL.ToString());

            return strRtData; //数据库查询结果
        }

        //注释：王庆文 2020年01月22日============================================================================
        //删除选中行的表定义、字段定义数据、以及实体物理库表。
        //注意是真正的物理删除，连同库表中的全部数据将被一起删除
        public string Delete_DBTableDefine(string strB64RequestData)
        {
            string strRtData = "no data"; //记录物理删除的执行结果

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strDBGroup = "Sys";  //数据库连接串分组名
            string strTableID = "0000"; //定义库中的TableID
            string strTableName = "aa"; //定义库中的TableName

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 3)
            {
                strDBGroup = strArray[0];
                strTableID = strArray[1];
                strTableName = strArray[2];
            }

            #endregion

            object objRowCount = 0; //执行SQL语句之后，受影响的行数
            clsDbSQLLogic myDB = new clsDbSQLLogic(); //实例化数据库操作类

            //先删除DB_FieldDefine中的字段定义信息
            string strDelColSQL = "delete from DB_FIELDDEFINE where TableID='" + strTableID + "'";
            objRowCount = myDB.YookingExecuteNonQuery("Sys", strDelColSQL); //物理删除字段定义信息
            strRtData = "【DB_FieldDefine中的字段定义数据删除完毕,受影响的行数为:" + objRowCount + "】，";

            //再删除DB_TableDefine中的库表定义信息
            string strDelTblSQL = "delete from DB_TABLEDEFINE where TableID='" + strTableID + "'";
            objRowCount = myDB.YookingExecuteNonQuery("Sys", strDelTblSQL); //物理删除库表定义信息
            strRtData += "【DB_TableDefine中的库表定义数据删除完毕,受影响的行数为:" + objRowCount + "】，";

            //最后删除表空间中的物理数据库表（包含了库表中的全部数据）
            if (strDBGroup == "System") strDBGroup = "Sys"; //兼容老框架
            if (strDBGroup == "User") strDBGroup = "Data";  //兼容老框架
            string strDropTblSQL = "drop table " + strTableName.ToUpper();
            objRowCount = myDB.YookingExecuteNonQuery(strDBGroup, strDropTblSQL);
            strRtData += "【物理库表及其全部数据删除完毕,受影响的行数为:" + objRowCount + "】";

            //clsRWFile myLog = new clsRWFile(); //将待执行的SQL语句记录下来
            //myLog.WriteInfoToTxtFile("SysLog", "wqw.txt", strRtData);

            return strRtData; //数据库物理删除的执行结果
        }

        //注释：王庆文 2020年02月05日=============================================================
        //获取指定TableID的库表的全部自定义列信息
        public string Get_DBFieldDefine(string strB64RequestData)
        {
            string strRtData = "no data";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strTableID = "000"; //数据库表TableID
            string strKeyWord = ""; //待全文检索的关键词

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 2)
            {
                strTableID = strArray[0];
                strKeyWord = strArray[1];
            }

            #endregion

            if (strKeyWord != "") //不区分大小写
            {
                strKeyWord = strKeyWord.ToUpper();
            }
           
            #region 生成查询记录的SQL语句

            StringBuilder sbQuerySQL = new StringBuilder();
            sbQuerySQL.AppendLine(" select TABLEID, ");
            sbQuerySQL.AppendLine("        FIELDORDER, ");
            sbQuerySQL.AppendLine("        FIELDNAME, ");
            sbQuerySQL.AppendLine("        FIELDMEMO, ");
            sbQuerySQL.AppendLine("        DATATYPE, ");
            sbQuerySQL.AppendLine("        DATALENGTH, ");
            sbQuerySQL.AppendLine("        ISALLOWNULL, ");
            sbQuerySQL.AppendLine("        DICTINFO, ");
            sbQuerySQL.AppendLine("        DATATYPEMEMO, ");
            sbQuerySQL.AppendLine("        ISBASEQUERYITEM, ");
            sbQuerySQL.AppendLine("        REPEATVALUEHANDLE, ");
            sbQuerySQL.AppendLine("        SYS_RECORDID ");
            sbQuerySQL.AppendLine("   from DB_FIELDDEFINE t ");
            sbQuerySQL.AppendLine("  where " + clsSQLSyntax.IsNullSQL("Sys", "t.SYS_CANCELDATETIME"));
            sbQuerySQL.AppendLine("    and t.FieldOrder < '90000000' ");
            sbQuerySQL.AppendLine("    and t.TableID = '" + strTableID + "' ");
            sbQuerySQL.AppendLine("    and (upper(t.FIELDNAME) like '%" + strKeyWord + "%' ");
            sbQuerySQL.AppendLine("         or upper(t.FIELDMEMO) like '%" + strKeyWord + "%') ");
            sbQuerySQL.AppendLine("   order by FIELDORDER asc ");

            #endregion

            //clsRWFile myLog = new clsRWFile(); //将待执行的SQL语句记录下来
            //myLog.WriteInfoToTxtFile("SysLog", "wqw.txt", sbQuerySQL.ToString());

            clsDbSQLLogic myDB = new clsDbSQLLogic(); //实例化数据库操作类
            strRtData = myDB.YookingExecuteJson("Sys", sbQuerySQL.ToString());

            return strRtData; //数据库查询结果
        }

        //注释：王庆文 2020年02月05日=============================================================
        //将客户端提交过来的库表字段定义信息保存到YookingSys.DB_FIELDDEFINE定义库中
        public string Save_DBFieldDefine(string strB64RequestData)
        {
            string strRtData = "no data";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strUserName = "02120119901"; //客户端用户名
            string strJsonArray = "[{null}]";   //将要向数据库中写入的真实数据内容
            string strDBGroup = "Data";         //数据库连接串分组名
            string strTableID = "00000000000";  //数据库表的TableID
            string strTableName = "TABLE_AAA";  //库表名称
            string strFieldOrder = "10000000";  //当前行在字段定义库中的排序值
            string strFieldName_Bak = "AAAAA";  //字段名称(修改之前)
            string strSys_RecordID = "000000";  //当前行的记录ID

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 8)
            {
                strUserName = strArray[0]; 
                strJsonArray = strArray[1];
                strDBGroup = strArray[2];
                strTableID = strArray[3];
                strTableName = strArray[4];
                strFieldOrder = strArray[5];
                strFieldName_Bak = strArray[6];
                strSys_RecordID = strArray[7];

                strTableName = strTableName.ToUpper();
            }

            #endregion

            //需要判断是否重值的字段名，支持可以多个字段
            string strDefKeyColSet = "Sys_RecordID";

            Object objFld = JsonConvert.DeserializeObject(strJsonArray); //json数组文本转成对象
            JArray jAryFld = objFld as JArray; //把上面的objFld转换为Jobject对象

            //从JSON数组中取出几个字段的值，后面的逻辑中要用到这些值
            string strFieldName = jAryFld[0]["FieldName"].ToString();
            string strDataType = jAryFld[0]["DataType"].ToString();
            string strDataLength = jAryFld[0]["DataLength"].ToString();
            string strIsAllowNull = jAryFld[0]["IsAllowNull"].ToString();

            clsDbSQLLogic myDB = new clsDbSQLLogic(); //实例化数据库操作类

            //如果是客户端新增加的字段定义数据
            if (strSys_RecordID.Contains("YKNEWROW"))
            {
                #region 先在真实数据库表中新增实际的物理字段

                //在物理数据表中新增字段的SQL语句例子如下（三大数据库的语法是一样的）：
                //alter table demo_RoleAccredit add ColunmAA NVARCHAR2(200) NULL          
                string strAddSQL = "alter table " + strTableName + " add " + strFieldName + " " + strDataType + "(" + strDataLength + ") " + strIsAllowNull;
            
                object objAddColCount = myDB.YookingExecuteNonQuery(strDBGroup, strAddSQL); //执行SQL，新增物理字段

                #endregion

                #region 再调整数据库中现有定义数据的排序值，为新记录空出来一个编号

                //开始update数据，对FieldOrder的值进行重新排序
                StringBuilder sbUpdateSQL = new StringBuilder();
                sbUpdateSQL.AppendLine(" update DB_FIELDDEFINE t set t.FieldOrder = t.FieldOrder + 1 ");
                sbUpdateSQL.AppendLine("   where t.TableID = '" + strTableID + "' ");
                sbUpdateSQL.AppendLine("    and t.fieldorder >= '" + strFieldOrder + "' ");
                sbUpdateSQL.AppendLine("    and t.FieldOrder < '90000000' ");

                object objUpdateCount = myDB.YookingExecuteNonQuery("Sys", sbUpdateSQL.ToString());

                #endregion

                #region 然后移除Sys_RecordID字段，为插入DB_FIELDDEFINE准备好数据

                //移除屬性Sys_RecordID
                foreach (JObject jobjItem in jAryFld)
                {
                    jobjItem.Remove("Sys_RecordID");
                }

                //移除了Sys_RecordID节点之后的新JSON数组
                strJsonArray = JsonConvert.SerializeObject(jAryFld);

                strDefKeyColSet = "TableID,FieldName"; //重新设定重复数据的判断条件

                #endregion
            }
            else
            {
                clsDBSpace mySpace = new clsDBSpace(); //数据库类型
                string strDBType = mySpace.GetDBType(strDBGroup);

                //修改实体表中的字段名称，三大数据库的语法是一样的
                if (strFieldName != strFieldName_Bak)
                {
                    string strRenameSQL = "alter table " + strTableName + " rename column " + strFieldName_Bak + " to " + strFieldName;
                    object objRenameCount = myDB.YookingExecuteNonQuery(strDBGroup, strRenameSQL); //执行SQL，修改字段名称
                }

                //修改字段类型、或者字段长度、或者是否必填项设置
                //alter table DEMO_SFZ modify XB nvarchar2(50) null; --MySQL语法
                //alter table DEMO_SFZ modify XB nvarchar2(51) null; --Oracle语法
                //alter table demo_wqw alter column XB nvarchar(11) null; --SQL Server语法

                //默认为ORACLE、MYSQL两种数据库的通用SQL语法
                string strChangeSQL = "alter table " + strTableName + " modify " + strFieldName + " " + strDataType + "(" + strDataLength + ") " + strIsAllowNull;
                if (strDBType == "SQLSERVER") //SQL Server的语法与其他的两个略有不同
                {
                    strChangeSQL = "alter table " + strTableName + " alter column " + strFieldName + " " + strDataType + "(" + strDataLength + ") " + strIsAllowNull;
                }
                object objChangeCount = myDB.YookingExecuteNonQuery(strDBGroup, strChangeSQL); //执行SQL，修改字段属性
            }

            //先判断数据是否存在，根据判断结果自动执行insert或者update
            clsWriteDB myWrite = new clsWriteDB(); //实例化数据库操作类
            DataSet dsData = clsJConvert.JArryToDataSet(strJsonArray); //将Json数组转成DataSet
            strRtData = myWrite.WriteDBNormal_UseSYSCol("Sys", "DB_FIELDDEFINE", strDefKeyColSet, strUserName, dsData);

            //clsRWFile myLog = new clsRWFile(); //将待执行的SQL语句记录下来
            //myLog.WriteInfoToTxtFile("SysLog", "aa.txt", strJsonArray);

            return strRtData; //数据库操作的最终结果
        }

        //注释：王庆文 2020年02月08日==========================================================================
        //物理删除选中指定记录ID的行的字段定义信息。
        public string Delete_DBFieldDefine(string strB64RequestData)
        {
            string strRtData = "no data"; //记录物理删除的执行结果

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strSys_RecordID = "000"; //行记录ID
            string strDBGroup = "Data";     //数据库连接串分组名
            string strTableName = "DB_AAA"; //库表名称
            string strFieldName = "FD_COL"; //字段名称

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 4)
            {
                strSys_RecordID = strArray[0];
                strDBGroup = strArray[1];
                strTableName = strArray[2];
                strFieldName = strArray[3];

                strTableName = strTableName.ToUpper();
            }

            #endregion

            clsDbSQLLogic myDB = new clsDbSQLLogic(); //实例化数据库操作类

            //先删除实际物理数据库表中的字段信息，三大数据库的语法是一样的
            string strDelColSQL = "alter table " + strTableName + " drop column " + strFieldName;
            object objColCount = myDB.YookingExecuteNonQuery(strDBGroup, strDelColSQL); //物理删除字段定义信息

            //再删除DB_FieldDefine中指定SYS_RECORDID的字段定义信息
            string strDelDefSQL = "delete from DB_FIELDDEFINE where Sys_RecordID='" + strSys_RecordID + "'";    
            object objDefCount = myDB.YookingExecuteNonQuery("Sys", strDelDefSQL); //从定义库中删除字段定义信息

            strRtData = "【DB_FieldDefine中的字段定义数据删除完毕,删除的行数为:" + objDefCount + "】";

            //clsRWFile myLog = new clsRWFile(); //将待执行的SQL语句记录下来
            //myLog.WriteInfoToTxtFile("SysLog", "wqw.txt", strRtData);

            return strRtData; //数据库物理删除的执行结果
        }


    }
}
